/**
 * author: 李硕
 * 2307124008
 * version: 1.0
 *
 * 包声明，指定该类所属的包为 demo4
 */
package demo4;

/**
 * 导入 java.util 包下的 Date 类，用于处理日期和时间
 */
import java.util.Date;

/**
 * 主类，用于测试宿舍管理系统的各项功能
 */
public class SmartDormitoryManagementSystem {
    /**
     * 程序的入口点，Java 虚拟机从该方法开始执行程序
     *
     * @param args 命令行参数，是一个字符串数组
     */
    public static void main(String[] args) {
        // 测试宿舍基础类
        // 创建一个 Dormitory 类的实例，初始化宿舍编号、位置、设施、床位数量和状态
        Dormitory dormitory = new Dormitory("D001", "A栋101", "床、桌椅、空调", 4, false);
        // 调用 addDormitory 方法添加宿舍信息
        dormitory.addDormitory();
        // 调用 modifyDormitoryInfo 方法修改宿舍信息
        dormitory.modifyDormitoryInfo("A栋102", "床、桌椅、空调、洗衣机", 4);
        // 调用 changeDormitoryStatus 方法更改宿舍状态
        dormitory.changeDormitoryStatus(true);
        // 调用 queryDormitoryInfo 方法查询宿舍信息
        dormitory.queryDormitoryInfo();

        // 测试日常用品类
        // 创建一个 DailySupply 类的实例，初始化用品名称、类别和是否需要补充的状态
        DailySupply supply = new DailySupply("洗发水", "洗漱用品", false);
        // 调用 displaySupplyInfo 方法显示日常用品信息
        supply.displaySupplyInfo();

        // 测试入住管理类
        // 获取当前时间作为入住时间
        Date checkInTime = new Date();
        // 计算入住结束时间，为入住时间往后推 30 天
        Date endTime = new Date(checkInTime.getTime() + 30 * 24 * 60 * 60 * 1000);
        // 创建一个 CheckInManagement 类的实例，初始化入住记录编号、床位号、宿舍编号、入住时间、学生编号和结束时间
        CheckInManagement checkIn = new CheckInManagement("CI001", 1, "D001", checkInTime, "S001", endTime);
        // 调用 addCheckIn 方法添加入住记录
        checkIn.addCheckIn();
        // 调用 modifyCheckIn 方法修改入住记录
        checkIn.modifyCheckIn(2, checkInTime, endTime);
        // 调用 queryCheckIn 方法查询入住记录
        checkIn.queryCheckIn();

        // 测试领取物资类
        // 获取当前时间作为物资领取时间
        Date receivingTime = new Date();
        // 修改为通过调用 getSupplyId 方法获取 supplyId
        // 创建一个 SupplyReceiving 类的实例，初始化领取记录编号、学生编号、物资编号、领取时间和领取数量
        SupplyReceiving receiving = new SupplyReceiving("R001", "S001", supply.getSupplyId(), receivingTime, 2);
        // 调用 recordReceiving 方法记录物资领取信息
        receiving.recordReceiving();
        // 计算物资领取开始时间，为领取时间往前推 10 天
        Date startTime = new Date(receivingTime.getTime() - 10 * 24 * 60 * 60 * 1000);
        // 调用 displayReceivingInfo 方法显示物资领取信息
        receiving.displayReceivingInfo(startTime, endTime);
        // 调用 modifyQuantity 方法修改物资领取数量
        receiving.modifyQuantity(3);

        // 测试自动监控类
        // 创建一个 AutomaticMonitoring 类的实例，初始化监控设备编号、监控位置、监控时间范围和视频存储路径
        AutomaticMonitoring monitoring = new AutomaticMonitoring("M001", "A栋宿舍区", "08:00-22:00", "/videos/M001");
        // 调用 addMonitoringDevice 方法添加监控设备
        monitoring.addMonitoringDevice();
        // 调用 queryMonitorLocation 方法查询监控设备位置
        monitoring.queryMonitorLocation();
        // 调用 displayMonitoringContent 方法显示监控内容
        monitoring.displayMonitoringContent();
    }
}





